/**
 * 日期时间工具类
 */

/**
 * 阳历转农历
 * @param {Date} solarDate - 阳历日期对象
 * @returns {string} 农历日期字符串，格式如"五月初五"
 */
import { Lunar } from 'lunar-javascript'

// 农历转换工具 - 使用lunar-javascript库
export function convertToLunar(solarDate) {
  const lunar = Lunar.fromDate(solarDate)
  const month = String(lunar.getMonth()).padStart(2, '0')
  const day = String(lunar.getDay()).padStart(2, '0')
  return `${month}-${day}`
}
/**
 * 判断给定的日期是否是今天的生日
 * @param {string} birthdayStr - 生日日期字符串，格式如'2000-05-27'或'2000-05-27T00:00:00'
 * @returns {boolean} 如果是今天的生日则返回true，否则返回false
 */
export function isTodayBirthday(birthdayStr) {
  if (!birthdayStr) return false
  
  // 处理ISO格式的日期字符串
  const dateStr = birthdayStr.split('T')[0]
  const [birthYear, birthMonth, birthDay] = dateStr.split('-').map(Number)
  
  const today = new Date()
  const currentMonth = today.getMonth() + 1 // getMonth()返回0-11
  const currentDay = today.getDate()
  
  // 只比较月和日，不比较年
  return birthMonth === currentMonth && birthDay === currentDay
}

/**
 * 解析ISO 8601时间字符串
 * @param {string} isoString - ISO 8601格式时间字符串，如'2025-05-27T00:00:00'
 * @param {object} [options] - 配置选项
 * @param {boolean} [options.includeTime=true] - 是否包含时间
 * @param {string} [options.separator='-'] - 日期分隔符
 * @returns {string} 格式化后的日期时间字符串
 */
export function parseISODateTime(isoString, options = {}) {
  const {
    includeTime = true,
    separator = '-'
  } = options

  const date = new Date(isoString)
  
  // 验证日期有效性
  if (isNaN(date.getTime())) {
    console.error('Invalid date string:', isoString)
    return ''
  }

  const year = date.getFullYear()
  const month = String(date.getMonth() + 1).padStart(2, '0')
  const day = String(date.getDate()).padStart(2, '0')
  const hours = String(date.getHours()).padStart(2, '0')
  const minutes = String(date.getMinutes()).padStart(2, '0')
  const seconds = String(date.getSeconds()).padStart(2, '0')

  let formattedDate = [year, month, day].join(separator)
  
  if (includeTime) {
    formattedDate += ` ${[hours, minutes, seconds].join(':')}`
  }

  return formattedDate
}

/**
 * 示例用法：
 * parseISODateTime('2025-05-27T00:00:00') 
 * // 返回 '2025-05-27 00:00:00'
 * 
 * parseISODateTime('2025-05-27T00:00:00', {includeTime: false}) 
 * // 返回 '2025-05-27'
 * 
 * parseISODateTime('2025-05-27T00:00:00', {separator: '/'}) 
 * // 返回 '2025/05/27 00:00:00'
 */


/**
 * 格式化日期时间字符串
 * @param {Date} date - 日期对象
 * @param {string} format - 格式化字符串，如'YYYY-MM-DD HH:mm:ss'
 * @returns {string} 格式化后的日期时间字符串
 */
export function formatDateTime(date, format) {
  const year = date.getFullYear()
  const month = String(date.getMonth() + 1).padStart(2, '0')
  const day = String(date.getDate()).padStart(2, '0')
  const hours = String(date.getHours()).padStart(2, '0')
  const minutes = String(date.getMinutes()).padStart(2, '0')
  const seconds = String(date.getSeconds()).padStart(2, '0')

  const formattedDate = format
   .replace('YYYY', year)
   .replace('MM', month)
   .replace('DD', day)
   .replace('HH', hours)
   .replace('mm', minutes)
   .replace('ss', seconds)

  return formattedDate
}

/**
 * 示例用法：
 * formatDateTime(new Date(), 'YYYY-MM-DD HH:mm:ss') 
 * // 返回当前日期时间，格式如'2021-08-17 10:25:30'
 */